/*
 * @: 
 * @Version: 1.0
 * @Autor: ziwei
 * @Date: 2021-09-17 14:24:11
 * @LastEditors: ziwei
 * @LastEditTime: 2021-11-01 16:04:55
 */

const { ftruncateSync } = require("fs");

//组合
function add1(str) {
    return str+1;
}
function add2(str) {
  return str + 2;
}
function add3(str) {
  return str + 3;
}

let r1 = add1(add2(add2('hello')))

function compose(...funcs) {
  if(funcs.length ==0 ){
    return (args)=>args
  }
  else if(funcs.length==1){
    return funcs[0]
  }
  return funcs.reduce((a,b)=>(...args)=>a(b(args)))
}

/* 
第一次 a=add1 b=add2 返回 (...args)=>add1(add2(...args))
第二次 a=(...args)=>add1(add2(...args)) b=add3返回 （...args）=>(add1(add2(add2(...args))))
*/

let r2 = compose(add1,add2,add3)(1,2)